Red Hat System Administration II 8.2

Управление контекстом файлов SELinux

Задачи

После завершения этого раздела вы сможете:

  • управлять правилами политики SELinux, которые определяют контекст по умолчанию для файлов и каталогов, с помощью команды semanage fcontext;

  • применять контекст, заданный политикой SELinux, к файлам и каталогам с помощью команды restorecon.

Исходный контекст SELinux

В системах, где работает SELinux, все процессы и файлы имеют метки. Метка представляет информацию, касающуюся безопасности, которая называется контекстом SELinux.

Новые файлы обычно наследуют контекст SELinux от родительского каталога, что гарантирует наличие надлежащего контекста.

Но эта процедура наследования может быть нарушена двумя способами. Во-первых, если вы создадите файл в одном каталоге, а затем переместите его в другой каталог, где предполагается его использовать, у файла по-прежнему будет контекст SELinux каталога, в котором он был создан, а не конечного каталога. Во-вторых, если вы скопируете файл с сохранением контекста SELinux, например с помощью команды cp -a, контекст SELinux будет отражать местоположение исходного файла.

В следующем примере демонстрируется наследование и связанные с ним проблемы. Рассмотрим два файла, созданные в каталоге /tmp, один из которых перемещен в каталог /var/www/html, а второй скопирован в тот же каталог. Обратите внимание на контекст SELinux для файлов. Для файла, который был перемещен в каталог /var/www/html, сохранился контекст каталога /tmp. Файл, который был скопирован в каталог /var/www/html, унаследовал контекст SELinux от каталога /var/www/html.

Команда ls -Z отображает контекст SELinux для файла. Обратите внимание на метку файла.

[root@host ~]# ls -Z /var/www/html/index.html
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/index.html  

Команда ls -Zd отображает контекст SELinux для каталога.

[root@host ~]# ls -Zd /var/www/html/
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/ 

Обратите внимание, что у /var/www/html/index.html та же метка, что и у родительского каталога /var/www/html/. Теперь создайте файлы вне каталога /var/www/html и обратите внимание на их контекст.

[root@host ~]# touch /tmp/file1 /tmp/file2
[root@host ~]# ls -Z /tmp/file*
unconfined_u:object_r:user_tmp_t:s0 /tmp/file1
unconfined_u:object_r:user_tmp_t:s0 /tmp/file2

Переместите один из этих файлов в каталог /var/www/html, скопируйте второй и обратите внимание на метку каждого файла.

[root@host ~]# mv /tmp/file1 /var/www/html/
[root@host ~]# cp /tmp/file2 /var/www/html/
[root@host ~]# ls -Z /var/www/html/file*
unconfined_u:object_r:user_tmp_t:s0 /var/www/html/file1
unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/file2  

Перемещенный файл сохраняет исходную метку, а скопированный файл наследует метку от каталога /var/www/html. unconfined_u: — это пользователь, object_r: ― это роль, а s0 — это уровень. Уровень чувствительности 0 — это минимально возможный уровень.

Изменение контекста SELinux для файла

Изменить контекст SELinux для файлов можно с помощью команд semanage fcontext, restorecon и chcon.

Предпочтительный метод установки контекста SELinux для файла ― объявление метки по умолчанию с помощью команды semanage fcontext и последующее применение этого контекста к файлу с помощью команды restorecon. Это гарантирует наличие нужных меток даже после полной перерасстановки меток в файловой системе.

Команда chcon изменяет контекст SELinux. chcon устанавливает контекст безопасности для файла, хранящегося в файловой системе. Это полезно при проведении тестов и экспериментов. Однако при этом изменения контекста не сохраняются в базе данных контекста SELinux. При выполнении команды restorecon изменения, сделанные командой chcon, отменяются. Кроме того, при перерасстановке меток во всей файловой системе контекст SELinux, измененный с помощью команды chcon, будет восстановлен.

Далее показано создание каталога. Тип каталога ― default_t.

[root@host ~]# mkdir /virtual
[root@host ~]# ls -Zd /virtual
drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 /virtual

Команда chcon изменяет контекст для каталога /virtual: значение типа изменяется на httpd_sys_content_t.

[root@host ~]# chcon -t httpd_sys_content_t /virtual
[root@host ~]# ls -Zd /virtual
drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 /virtual 

Команда restorecon восстанавливает значение default_t для типа каталога. Обратите внимание на сообщение Relabeled.

[root@host ~]# restorecon -v /virtual
Relabeled /virtual from unconfined_u:object_r:httpd_sys_content_t:s0 to unconfined_u:object_r:default_t:s0
[root@host ~]# ls -Zd /virtual
drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 /virtual

Задание контекста безопасности SELinux по умолчанию для файлов

С помощью команды semanage fcontext можно отобразить и изменить правила, которые команда restorecon использует для установки контекста файлов по умолчанию. Путь и имена файлов указываются при помощи расширенных регулярных выражений. Чаще всего в правилах fcontext применяется регулярное выражение (/.*)?, которое означает «сопоставь с символом /, за которым следует любое число любых символов». Оно рекурсивно обрабатывает каталог, указанный перед выражением, и все элементы в этом каталоге.

Основные операции с контекстом файлов

В следующей таблице приведены опции команды semanage fcontext, позволяющие добавлять, удалять и отображать контекст SELinux для файлов.

Таблица 5.1. Опции команды semanage fcontext

ОпцияОписание
-a, --add Добавление записи с указанным типом объекта
-d, --delete Удаление записи с указанным типом объекта
-l, --list Отображение списка записей с указанным типом объекта

Чтобы обеспечить наличие необходимых утилит для управления контекстом SELinux, установите пакеты policycoreutils и policycoreutils-python. Они содержат команды restorecon и semanage соответственно.

Чтобы убедиться, что все файлы в каталоге имеют правильный контекст, выполните команду semanage fcontext -l, а затем команду restorecon. В следующем примере обратите внимание на контекст каждого файла до и после выполнения команд semanage и restorecon.

[root@host ~]# ls -Z /var/www/html/file*
unconfined_u:object_r:user_tmp_t:s0 /var/www/html/file1  unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/file2  
[root@host ~]# semanage fcontext -l
...output omitted...
/var/www(/.*)?       all files    system_u:object_r:httpd_sys_content_t:s0
...output omitted... 
[root@host; ~]# restorecon -Rv /var/www/
Relabeled /var/www/html/file1 from unconfined_u:object_r:user_tmp_t:s0 to unconfined_u:object_r:httpd_sys_content_t:s0
[root@host ~]# ls -Z /var/www/html/file*
unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/file1  unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/file2

В следующем примере показано, как с помощью команды semanage добавить контекст для нового каталога.

[root@host ~]# mkdir /virtual
[root@host ~]# touch /virtual/index.html
[root@host ~]# ls -Zd /virtual/
drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 /virtual/ 
[root@host ~]# ls -Z /virtual/
-rw-r--r--. root root unconfined_u:object_r:default_t:s0 index.html
[root@host ~]# semanage fcontext -a -t httpd_sys_content_t '/virtual(/.*)?'
[root@host ~]# restorecon -RFvv /virtual
[root@host ~]# ls -Zd /virtual/
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /virtual/
[root@host ~]# ls -Z /virtual/
-rw-r--r--. root root system_u:object_r:httpd_sys_content_t:s0 index.html

Ссылки

Man-страницы chcon(1), restorecon(8), semanage(8) и semanage-fcontext(8)